# p01_gen_gtc.sh
# - 描述: 生成 SAR DOM 影像
# - 作者: iam002
# - 日期: 2025年2月24日
# - 版本: V1.0
# 
# 生成 SAR DOM 影像, 可以手动设置 DEM 影像切片(不用整个SAR场景), 同时
# 可使用拟合模型来精化地理编码查找表。
#
# 1. 执行多视
# 2. 重采样DSM
# 3. 地理编码
# 4. 精化地理编码
# 5. 后向投影
# 6. 清除临时文件

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 读取全局变量
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
if [ ! -f "$1" ]; then
    source p00_global_params.sh
else
    source $1
fi

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 日志路径
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
cur_script_name=$(basename "$0" .sh)
out_log_path=$in_output_folder/$cur_script_name".log"

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 读取 SAR 数据
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
tmp_slc_path=$in_output_folder/$in_produce_name".slc"
tmp_slc_par_path=$in_output_folder/$in_produce_name".slc_par"

echo "[input] SAR tiff path: " $in_sar_tiff_path | tee $out_log_path
echo "[input] SAR xml path: " $in_sar_xml_path | tee -a $out_log_path
echo -e "Running par_XX_SLC ...\n" | tee -a $out_log_path
# 根据需要可替换 par_XX_SLC, 更多程序详见 /usr/local/software/GAMMA_SOFTWARE/ISP/bin
if [ "$sate_type" == "LT1" ]; then
    par_LT1_SLC $in_sar_tiff_path $in_sar_xml_path $tmp_slc_par_path $tmp_slc_path | tee -a $out_log_path
elif [ "$sate_type" == "GF3" ]; then
    par_GF3_SLC $in_sar_tiff_path $in_sar_xml_path $tmp_slc_par_path $tmp_slc_path | tee -a $out_log_path
fi
echo -e "\nFinish par_XX_SLC!" | tee -a $out_log_path

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 执行多视处理 获得幅度影像
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
out_slc_path=$in_output_folder/$in_produce_name".mli"
out_slc_par_path=$in_output_folder/$in_produce_name".mli_par"

echo "[input] looknum rg: " $in_sar_looknum_rg ", looknum az: " $in_sar_looknum_az | tee -a $out_log_path
echo -e "Running multi_look ...\n" | tee -a $out_log_path
multi_look $tmp_slc_path $tmp_slc_par_path $out_slc_path $out_slc_par_path $in_sar_looknum_rg $in_sar_looknum_az | tee -a $out_log_path
echo -e "\nFinish multi_look!" | tee -a $out_log_path

rm -f $tmp_slc_path
rm -f $tmp_slc_par_path

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 设置geoid
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
if [ "$in_use_geoid" == "egm2008" ]; then
    geoid_dem_path="$DIFF_HOME/scripts/egm2008-5.dem"
    geoid_dem_par_path="$DIFF_HOME/scripts/egm2008-5.dem_par"
elif [ "$in_use_geoid" == "egm96" ]; then
    geoid_dem_path="$DIFF_HOME/scripts/egm96.dem"
    geoid_dem_par_path="$DIFF_HOME/scripts/egm96.dem_par"
else
    geoid_dem_path="-"
    geoid_dem_par_path="-"
fi

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 读取 DEM
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
tmp_dem_path=$in_output_folder/$in_produce_name".dem"
tmp_dem_par_path=$in_output_folder/$in_produce_name".dem_par"

echo "[input] DEM tiff path: " $in_dem_path | tee $out_log_path
echo "[input] DEM resample factor x: " $in_dem_resamp_factor_x | tee -a $out_log_path
echo "[input] DEM resample factor y: " $in_dem_resamp_factor_y | tee -a $out_log_path

echo -e "Running dem_import ...\n" | tee -a $out_log_path
dem_import $in_dem_path $tmp_dem_path $tmp_dem_par_path 0 1 $geoid_dem_path $geoid_dem_par_path 0 | tee -a $out_log_path
echo -e "\nFinish dem_import!" | tee -a $out_log_path

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 重采样 DEM
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
out_resamp_dem_path=$in_output_folder/$in_produce_name"_resamp.dem"
out_resamp_dem_par_path=$in_output_folder/$in_produce_name"_resamp.dem_par"

echo -e "Running dem_trans ...\n" | tee -a $out_log_path
if [ -f "$out_resamp_dem_par_path" ]; then
    rm -f $out_resamp_dem_par_path
fi
dem_trans $tmp_dem_par_path $tmp_dem_path $out_resamp_dem_par_path $out_resamp_dem_path $in_dem_resamp_factor_y $in_dem_resamp_factor_x - - - - - | tee -a $out_log_path
echo -e "\nFinish dem_trans!" | tee -a $out_log_path

# 可通过 disshd 查看 DEM
# (1) disshd $out_resamp_dem_path 2464 2.778038499e-04 -2.778599818e-04
# (2) 推荐: disdem_par LT1_143448_resamp.dem LT1_143448_resamp.dem_par

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 删除临时文件
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
rm -f $tmp_dem_par_path
rm -f $tmp_dem_path

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 执行地理编码
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

# 地理编码查找表
out_lkt_path=$in_output_folder/$in_produce_name.lkt

echo -e "Running gc_map2 ...\n" | tee $out_log_path
gc_map2 $out_slc_par_path $out_resamp_dem_par_path $out_resamp_dem_path - - $out_lkt_path 1 1 | tee -a $out_log_path
echo -e "\nFinish gc_map2!" | tee -a $out_log_path

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 精化地理编码表
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
if [ -n "$in_diff_par_path" ]; then
    dem_width=$(grep -oP '^width:\s*\K\d+' "$out_resamp_dem_par_path")

    # 精化地理编码表
    out_fine_lkt_path=$in_output_folder/$in_produce_name.fine_lkt

    echo -e "Running gc_map_fine ...\n" | tee -a $out_log_path
    gc_map_fine $out_lkt_path $dem_width $in_diff_par_path $out_fine_lkt_path 0
    echo -e "\nFinish gc_map_fine!" | tee -a $out_log_path

    rm -f $out_lkt_path
    out_lkt_path=$out_fine_lkt_path
fi

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 后向投影
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
# 获取图像大小
dem_width=$(grep -oP '^width:\s*\K\d+' "$out_resamp_dem_par_path")
slc_width=$(grep -oP '^range_samples:\s*\K\d+' "$out_slc_par_path")

out_gtc_path=$in_output_folder/$in_produce_name.gtc

echo -e "GTC Width: " $dem_width | tee -a $out_log_path
echo -e "Running geocode_back ...\n" | tee -a $out_log_path
geocode_back $out_slc_path $slc_width $out_lkt_path $out_gtc_path $dem_width - 1 0 | tee -a $out_log_path
echo -e "\nFinish geocode_back!" | tee -a $out_log_path

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 清除文件
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
rm -f $out_resamp_dem_path
rm -f $out_slc_path
rm -f $out_lkt_path


